/*
 * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
 *
 * This file is part of FileExplorer.
 *
 * FileExplorer is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * FileExplorer is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with SwiFTP.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.ttrj.fileexplorer;

import java.io.File;
import java.util.ArrayList;

import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;

public class IntentBuilder {

	public static void viewFile(final Context context, final String filePath) {
		String type = getMimeType(filePath);

		if (!TextUtils.isEmpty(type) && !TextUtils.equals(type, "*/*")) {
			/* 设置intent的file与MimeType */
			Intent intent = new Intent();
			intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
			intent.setAction(android.content.Intent.ACTION_VIEW);
			intent.setDataAndType(Uri.fromFile(new File(filePath)), type);
			context.startActivity(intent);
		} else {
			// unknown MimeType
			AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(context);
			dialogBuilder.setTitle(R.string.dialog_select_type);

			CharSequence[] menuItemArray = new CharSequence[] { context.getString(R.string.dialog_type_text), context.getString(R.string.dialog_type_audio),
					context.getString(R.string.dialog_type_video), context.getString(R.string.dialog_type_image) };
			dialogBuilder.setItems(menuItemArray, new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					String selectType = "*/*";
					switch (which) {
					case 0:
						selectType = "text/plain";
						break;
					case 1:
						selectType = "audio/*";
						break;
					case 2:
						selectType = "video/*";
						break;
					case 3:
						selectType = "image/*";
						break;
					}
					Intent intent = new Intent();
					intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
					intent.setAction(android.content.Intent.ACTION_VIEW);
					intent.setDataAndType(Uri.fromFile(new File(filePath)), selectType);
					context.startActivity(intent);
				}
			});
			dialogBuilder.show();
		}
	}

	public static Intent buildSendFile(ArrayList<FileInfo> files) {
		ArrayList<Uri> uris = new ArrayList<Uri>();

		String mimeType = "*/*";
		for (FileInfo file : files) {
			if (file.IsDir)
				continue;

			File fileIn = new File(file.filePath);
			mimeType = getMimeType(file.fileName);
			Uri u = Uri.fromFile(fileIn);
			uris.add(u);
		}

		if (uris.size() == 0)
			return null;

		boolean multiple = uris.size() > 1;
		Intent intent = new Intent(multiple ? android.content.Intent.ACTION_SEND_MULTIPLE : android.content.Intent.ACTION_SEND);

		if (multiple) {
			intent.setType("*/*");
			intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
		} else {
			intent.setType(mimeType);
			intent.putExtra(Intent.EXTRA_STREAM, uris.get(0));
		}

		return intent;
	}

	@SuppressLint("DefaultLocale")
	private static String getMimeType(String filePath) {
		int dotPosition = filePath.lastIndexOf('.');
		if (dotPosition == -1)
			return "*/*";

		String ext = filePath.substring(dotPosition + 1, filePath.length()).toLowerCase();
		String mimeType = MimeUtils.guessMimeTypeFromExtension(ext);
		if (ext.equals("mtz")) {
			mimeType = "application/miui-mtz";
		}

		return mimeType != null ? mimeType : "*/*";
	}
}
